#ifndef _APRILTAG_OPERATE
#define _APRILTAG_OPERATE



#include "opencv2/opencv.hpp"

extern "C"{
#include "../apriltag.h"
#include "../tag36h11.h"
#include "../common/getopt.h"
}

class apriltag
{
private:
    apriltag_detector_t *td ;
    apriltag_family_t *tf ;
    char *famname ;
    getopt_t *getopt ;

public:
    int id; // apriltag 的id
    double p[4][2]; // apriltag 的四个角
    cv::Rect2d roi;
    int num_apriltag; // 检测到apriltag数量
    bool whether_init_tracker; // tracker 是否重新设定roi区域
    int count_defind_apriltag; // 没有找到apriltag的次数，记满n次则开始全图搜索； 为-1时，代表运行后尚未找到apriltag

public:
    void init(void); // 初始化apriltag, 设定apriltag各项参数
    void destroy(void); // 清空动态分配的内存

    void detect(cv::Mat &image_rgb); // 找到靶标函数 无roi全图
    void detect(cv::Mat &image_rgb, cv::Rect2d &roi_fake); // 找到靶标函数 有roi

    void describe(cv::Mat &frame); // 勾勒apriltag边框

public:
    void roi_restore(cv::Mat &frame); // 使roi包括整幅图
    void roi_correct(cv::Mat &frame); // 让roi不超出图像
    void roi_get(double magnify_rate); // 根据apriltag的四个角，得到roi
    void roi_magnify(double magnify_rate); // 放大/缩小　roi
};



#endif
